package br.eng.eliseu.gwt.gestaoWeb.model.pessoa;

import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.eng.eliseu.gwt.gestaoWeb.model.BaseEntity;

@Entity
@SequenceGenerator(name="SQ_PESSOADOCUMENTO", sequenceName="SQ_PESSOADOCUMENTO")
@NamedQueries({
	@NamedQuery(name="pessoaDocumento.porPessoa", query="select u from PessoaDocumento u where 1=1 "+
			"and u.pessoa = :pessoa "),
	@NamedQuery(name="pessoaDocumento.porDocumento", query="select u from PessoaDocumento u where 1=1 "+
			"and u.tipoDocumento = :tipoDocumento "+
			"and upper( u.documento ) like upper(:documento) "),
	@NamedQuery(name="pessoaDocumento.porPessoaTipo", query="select u from PessoaDocumento u where 1=1 "+
			"and u.pessoa = :pessoa "+
			"and u.tipoDocumento = :tipoDocumento "),
	@NamedQuery(name="pessoaDocumento.deleteDocumentoNotIn", query="delete from PessoaDocumento u where 1=1 "+
 			"and u.pessoa = :pessoa "+
			"and u not in (:lista)"),
	@NamedQuery(name="pessoaDocumento.deleteDocumento", query="delete from PessoaDocumento u where 1=1 "+
			"and u.pessoa = :pessoa ")
	})


public class PessoaDocumento extends BaseEntity{

	private static final long serialVersionUID = 2646870564089416742L;

	public PessoaDocumento() {}
	
	@Id
	@GeneratedValue(generator="SQ_PESSOADOCUMENTO", strategy=GenerationType.AUTO)
	private Integer id;

	@ManyToOne(cascade=CascadeType.REMOVE)
	@JoinColumn(name="pessoa_id")
	private Pessoa pessoa;
	
	@Enumerated(EnumType.STRING)
	@Column(length=15)
	private TipoDocumentoEnum tipoDocumento;
	
	@Column(length=254)
	private String documento;
	
	@Column(length=254)
	private String emissor;
	
	@Temporal(value=TemporalType.DATE)
	private Date dtEmissao;
	
	@Temporal(value=TemporalType.DATE)
	private Date dtValidade;

	@Temporal(value=TemporalType.DATE)
	private Date dtPrimeiraVia;

	
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Pessoa getPessoa() {
		return pessoa;
	}
	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}
	public TipoDocumentoEnum getTipoDocumento() {
		return tipoDocumento;
	}
	public void setTipoDocumento(TipoDocumentoEnum tipoDocumento) {
		this.tipoDocumento = tipoDocumento;
	}
	public String getDocumento() {
		return documento;
	}
	public void setDocumento(String documento) {
		this.documento = documento.trim();
	}
	public String getEmissor() {
		return emissor;
	}
	public void setEmissor(String emissor) {
		this.emissor = emissor;
	}
	public Date getDtEmissao() {
		return dtEmissao;
	}
	public void setDtEmissao(Date dtEmissao) {
		this.dtEmissao = dtEmissao;
	}
	public Date getDtValidade() {
		return dtValidade;
	}
	public void setDtValidade(Date dtValidade) {
		this.dtValidade = dtValidade;
	}
	public Date getDtPrimeiraVia() {
		return dtPrimeiraVia;
	}
	public void setDtPrimeiraVia(Date dtPrimeiraVia) {
		this.dtPrimeiraVia = dtPrimeiraVia;
	}
	
	public String toString(){
		return getTipoDocumento().getNome()+ " - " + getDocumento();
	}
	public String getChave(){
		return getTipoDocumento().name()+getDocumento();
	}
	
}
